package com.vhall.component.service.record;

import com.alibaba.fastjson.JSONObject;
import com.vhall.component.entity.audit.vo.AuditRecordResponseVO;
import com.vhall.component.entity.record.RecordEntity;
import com.vhall.component.entity.record.RecordEntityDTO;
import com.vhall.component.entity.record.vo.*;
import com.vhall.component.entity.room.vo.RoomConsoleListRespVO;
import com.vhall.component.entity.room.vo.RoomConsoleListVO;


/**
 * @author dongsong
 */
public interface RecordService {

    /**
     * 获取回放列表
     *
     * @param reqVo 参数请求
     * @return 返回值
     */
    GetRecordListRspVo getRecordList(GetRecordListReqVo reqVo);

    /**
     * 设置默认回放
     *
     * @param reqVO 参数请求
     * @return 返回值
     */
    void setDefaultRecord(SetDefaultRecordReqVo reqVO);

    /**
     * 取消默认回放
     * @param roomId
     */
    void cancelDefault(String roomId);

    /**
     * 删除回放
     *
     * @param reqVo 参数请求
     * @return 返回值
     */
    JSONObject deleteRecord(DeleteRecordReqVo reqVo);

    /**
     * 生成回放
     *
     * @param reqVO 参数
     * @return 返回值
     */
    RecordEntity saveRecord(CutRecordReqVO reqVO);

    /**
     * 下载回放
     *
     * @param reqVO 参数
     * @return 返回结果
     */
    JSONObject downRecord(RecordDownReqVO reqVO);

    /**
     * 下载回放Quality
     *
     * @param reqVO 参数
     * @return 返回结果
     */
    JSONObject downRecordQuality(RecordDownQualityReqVO reqVO);

    /**
     * 更新回放
     *
     * @param reqVO 参数
     * @return 更新结果
     */
    Boolean uploadRecord(CreateRecordReqVO reqVO);

    /**
     * 获取回放信息
     *
     * @param reqVO 参数
     * @return 结果
     */
    GetRecordRspVo getRecord(GetRecordReqVo reqVO);

    /**
     * 获取音视频列表
     *
     * @param reqVo 参数
     * @return 结果
     */
    GetUploadListRspVo getUploadList(GetUploadListReqVo reqVo,Integer accountId);

    /**
     * 重命名音视频
     *
     * @param reqVo 参数
     */
    void renameUpload(RenameUploadReqVo reqVo);

    /**
     * 获取音视频详情
     *
     * @param reqVo 参数
     * @return 结果
     */
    JSONObject getUploadInfo(GetUploadInfoReqVo reqVo);

    /**
     * 删除某个清晰度
     *
     * @param reqVo 参数
     * @return 结果
     */
    JSONObject deleteVideo(DeleteVideoReqVo reqVo);

    /**
     * 获取待裁剪的回放信息
     *
     * @param reqVo 参数
     * @return 结果
     */
    GetCutDetailRspVo getCutRecordDetail(GetCutDetailReqVo reqVo);

    /**
     * 获取回放详情
     *
     * @param reqVO 参数
     * @return 结果
     */
    GetVodInfoRspVO getVodInfo(GetVodInfoReqVO reqVO);

    /**
     * 获取裁剪信息
     *
     * @param reqVO 参数
     * @return 裁剪信息
     */
    JSONObject getCutList(CutListReqVO reqVO);

    /**
     * 裁剪
     *
     * @param reqVO 参数
     * @return 结果
     */
    RecordEntity cutMergeRecord(CutMergeRecordReqVO reqVO);

    /**
     * 删除某个音视屏
     *
     * @param reqVo 参数
     * @return 结果
     */
    JSONObject deleteUpload(DeleteUploadReqVo reqVo);

    /**
     * 插入数据
     *
     * @param recordEntity 参数
     */
    void insert(RecordEntityDTO recordEntity);

    /**
     * 更新数据
     *
     * @param recordEntity 参数
     */
    void updateById(RecordEntityDTO recordEntity);

    /**
     * 根据vodId查询音视频数据
     *
     * @param vodId vodid
     * @return 音视频信息
     */
    RecordEntityDTO findByVodId(String vodId);

    /**
     * 设置任意回放
     *
     * @param reqVO 参数请求
     * @return 返回值
     */
    void setWilfullyRecord(SetDefaultRecordReqVo reqVO);

    Boolean addRecord(GetRecordListReqVo reqVo);

    /**
     * 审核默认回放
     * @param ilId  房间ID
     * @param recordId 回放ID
     * @param auditStatus 审核状态
     * @param description 审核意见
     * @return
     */
    boolean doAuditRoomRecord(Integer ilId,
                              Integer recordId,
                              Integer auditStatus,
                              String description);

    boolean doAuditRoomRecordSecond(Integer ilId,
                              Integer recordId,
                              Integer auditStatus,
                              String description);

    AuditRecordResponseVO auditInfo(Integer recordId);

    GetRecordListRspVo getAuditList(GetRecordListReqVo reqVo);
    GetRecordListRspVo getAuditListSecond(GetRecordListReqVo reqVo);

    RoomConsoleListRespVO auditRoomList(Integer accountId, RoomConsoleListVO reqVO);

    /**
     * 保存章节打点
     * @param reqVO
     * @return
     */
    SaveRecordChapterManagementResponseVO saveRecordChapterManagement(SaveRecordChapterManagementRequestVO reqVO);

    /**
     * 设置回放是否开启章节打点
     * @param reqVO
     * @return
     */
    SetPointStatusResponseVO setPointStatus(SetPointStatusRequestVO reqVO);

    /**
     * 获取回放的章节打点信息
     * @param reqVO
     * @return
     */
    RecordChapterListResponseVO getRecordChapterList(RecordChapterListRequestVO reqVO);

    AuditRecordResponseVO auditInfoSecond(Integer recordId);

}
